package tw.decorator;

/*
装饰器模式（Decorator Pattern）
允许向一个现有的对象添加新的功能，
同时又不改变其结构。
 */
/*
我们通过下面的实例来演示装饰器模式的用法。
其中，我们将把一个形状装饰上不同的颜色，
同时又不改变形状类。
 */
public class DecoratorPatternTest {
    public static void main(String[] args) {
        Shape circle = new Circle();
        //使用 RedShapeDecorator 来装饰 *Shape对象。
        ShapeDecorator redCircle = new RedShapeDecorator(new Circle());
        ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangle());
        //Shape redCircle = new RedShapeDecorator(new Circle());
        //Shape redRectangle = new RedShapeDecorator(new Rectangle());
        System.out.println("Circle with normal border");
        circle.draw();

        System.out.println("\nCircle of red border");
        redCircle.draw();

        System.out.println("\nRectangle of red border");
        redRectangle.draw();
    }
}